package it.maganar.lesscaos.client;



import it.maganar.lesscaos.entity.Disponibilita;
import it.maganar.lesscaos.entity.Partecipazione;
import it.maganar.lesscaos.entity.Tappa;
import it.maganar.lesscaos.exception.UserNotLoggedException;
import it.maganar.lesscaos.session.ServiceGateRemote;
import it.maganar.lesscaos.util.GCInitializer;
import it.maganar.lesscaos.util.TipoVeicolo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Vector;
import java.sql.Date;
import java.util.List;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.sun.org.apache.bcel.internal.generic.ArrayType;



public class DisponibilitaWidget {

	ServiceGateRemote serviceGate;
	int i;
	List<Disponibilita> listaDisponibilita;

	private JFrame framePrincipale;
	private JPanel pannelloTitoloPrincipale;
	private JPanel pannelloCorpoPrincipale;
	private JLabel titoloPrincipale;
	private JPanel pannelloMenuPrincipale;
	private JButton bottoneVisualizzaDisponibilita;
	private JButton bottoneNuovaDisponibilita;
	private JFrame frameVisualizza;
	private JPanel pannelloTitoloVisualizza;
	private JPanel pannelloCorpoVisualizza;
	private JLabel titoloVisualizza;
	private JFrame frameNuova;
	private JPanel pannelloTitoloNuova;
	private JPanel pannelloCorpoNuova;
	private JLabel titoloNuova;
	private JButton[] bottoneElimina;
	private JPanel[] pannelloBottoneElimina;
		
	
	public DisponibilitaWidget(final LessCaosMainWidget lcmw) {
		
		serviceGate = NetworkConnector.sgr;
		
		//****************** FINESTRA PRINCIPALE ********************//
		
		// Inizializzazione Frame
		framePrincipale = new JFrame("LESS-CAOS");
		framePrincipale.setLayout(new BorderLayout());
		
		
		// Inizializzazione e Inserimento pannelli principali
		pannelloTitoloPrincipale = new JPanel();
		pannelloTitoloPrincipale.setLayout(new FlowLayout());
		pannelloTitoloPrincipale.setBackground(Color.DARK_GRAY);
		framePrincipale.add(pannelloTitoloPrincipale, BorderLayout.NORTH);
		
		pannelloCorpoPrincipale = new JPanel();
		pannelloCorpoPrincipale.setLayout(new FlowLayout());
		//pannelloCorpo.setBackground(Color.LIGHT_GRAY);
		framePrincipale.add(pannelloCorpoPrincipale, BorderLayout.CENTER);
		
		pannelloMenuPrincipale = new JPanel();
		pannelloMenuPrincipale.setLayout(new GridLayout(4,1));
		pannelloCorpoPrincipale.add(pannelloMenuPrincipale);
		
		
		// Inizializzazione e Inserimento label
		titoloPrincipale = new JLabel("Disponibilità");
		titoloPrincipale.setForeground(Color.WHITE);
		pannelloTitoloPrincipale.add(titoloPrincipale);
		
		
		//Inizializzazione e Inserimento Pulsanti
		
		pannelloMenuPrincipale.add(new JLabel(""));
		
		bottoneVisualizzaDisponibilita = new JButton("Visualizza Disponibilità");
		pannelloMenuPrincipale.add(bottoneVisualizzaDisponibilita);
		
		pannelloMenuPrincipale.add(new JLabel(""));

		bottoneNuovaDisponibilita = new JButton("Nuova Disponibilità");
		pannelloMenuPrincipale.add(bottoneNuovaDisponibilita);
						
		
		//END
		framePrincipale.pack();
		framePrincipale.setSize(500,400);
		framePrincipale.setVisible(true);
		//framePrincipale.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		framePrincipale.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent event) {
				lcmw.setVisible(true);
	        } 
	    });
		
		
		//*** Eventi ***//
		
		bottoneVisualizzaDisponibilita.addMouseListener( 	new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent arg0) {}
			
			@Override
			public void mousePressed(MouseEvent arg0) {
				
				listaDisponibilita = null;
				
				try {					
					listaDisponibilita = serviceGate.ottieniListaDisponibilita();
					
					// ******************* FINESTRA VISUALIZZA DIPONIBILITA **********************//
					
					
					// Inizializzazione Frame
					frameVisualizza = new JFrame("LESS-CAOS");
					frameVisualizza.setLayout(new BorderLayout());
					
					
					// Inizializzazione e Inserimento pannelli principali
					pannelloTitoloVisualizza = new JPanel();
					pannelloTitoloVisualizza.setLayout(new FlowLayout());
					pannelloTitoloVisualizza.setBackground(Color.DARK_GRAY);
					frameVisualizza.add(pannelloTitoloVisualizza, BorderLayout.NORTH);
					
					pannelloCorpoVisualizza = new JPanel();
					pannelloCorpoVisualizza.setLayout(new FlowLayout());
					//pannelloCorpo.setBackground(Color.LIGHT_GRAY);
					frameVisualizza.add(pannelloCorpoVisualizza, BorderLayout.CENTER);
					
					JPanel pannelloDisponibilita = new JPanel();		
					pannelloDisponibilita.setBackground(Color.white);
					pannelloCorpoVisualizza.add(pannelloDisponibilita);
					
					GridLayout layout = new GridLayout(1,10);
					//layout.setHgap(20);
					pannelloDisponibilita.setLayout(layout);
					
					
					// Inizializzazione e Inserimento label
					titoloVisualizza = new JLabel("Disponibilità presenti");
					titoloVisualizza.setForeground(Color.WHITE);
					pannelloTitoloVisualizza.add(titoloVisualizza);
					
					JLabel lPartenza = new JLabel("Partenza");
					lPartenza.setOpaque(true);
					lPartenza.setBackground(Color.GRAY);
					lPartenza.setForeground(Color.WHITE);
					lPartenza.setPreferredSize(new Dimension(100, 0));
					
					JLabel lArrivo = new JLabel("Arrivo");
					lArrivo.setOpaque(true);
					lArrivo.setBackground(Color.GRAY);
					lArrivo.setForeground(Color.WHITE);
					
					JLabel lTappe = new JLabel("Tappe");
					lTappe.setOpaque(true);
					lTappe.setBackground(Color.GRAY);
					lTappe.setForeground(Color.WHITE);
					
					JLabel lOraPartenza = new JLabel("Ora Partenza");
					lOraPartenza.setOpaque(true);
					lOraPartenza.setBackground(Color.GRAY);
					lOraPartenza.setForeground(Color.WHITE);
					
					JLabel lOraArrivo = new JLabel("Ora Arrivo");
					lOraArrivo.setOpaque(true);
					lOraArrivo.setBackground(Color.GRAY);
					lOraArrivo.setForeground(Color.WHITE);
					
					JLabel lData = new JLabel("Data");
					lData.setOpaque(true);
					lData.setBackground(Color.GRAY);
					lData.setForeground(Color.WHITE);
					
					JLabel lTipoVeicolo = new JLabel("Tipo Veicolo");
					lTipoVeicolo.setOpaque(true);
					lTipoVeicolo.setBackground(Color.GRAY);
					lTipoVeicolo.setForeground(Color.WHITE);
					
					JLabel lNumeroPosti = new JLabel("Numero Posti");
					lNumeroPosti.setOpaque(true);
					lNumeroPosti.setBackground(Color.GRAY);
					lNumeroPosti.setForeground(Color.WHITE);				
					
					JLabel lPartecipanti = new JLabel("Partecipanti");
					lPartecipanti.setOpaque(true);
					lPartecipanti.setBackground(Color.GRAY);
					lPartecipanti.setForeground(Color.WHITE);
					
					JLabel lVuoto = new JLabel("");
					lVuoto.setOpaque(true);
					lVuoto.setBackground(Color.GRAY);//pannelloCorpoVisualizza.getBackground());
					
					pannelloDisponibilita.add(lPartenza);//, JLabel.CENTER));
					pannelloDisponibilita.add(lArrivo);//, JLabel.CENTER));
					pannelloDisponibilita.add(lTappe);//, JLabel.CENTER));
					pannelloDisponibilita.add(lOraPartenza);//, JLabel.CENTER));
					pannelloDisponibilita.add(lOraArrivo);//, JLabel.CENTER));
					pannelloDisponibilita.add(lData);//, JLabel.CENTER));
					pannelloDisponibilita.add(lTipoVeicolo);//, JLabel.CENTER));
					pannelloDisponibilita.add(lNumeroPosti);//, JLabel.CENTER));
					pannelloDisponibilita.add(lPartecipanti);
					pannelloDisponibilita.add(lVuoto);
						
					
					
					//+++ Visualizza Disponibilita +++//
					if (!listaDisponibilita.isEmpty()){
						layout.setRows(listaDisponibilita.size()+1);
						pannelloBottoneElimina = new JPanel[listaDisponibilita.size()];
						bottoneElimina = new JButton[listaDisponibilita.size()];
						
						for (i=0; i<listaDisponibilita.size(); i++){
							JLabel ldPartenza = new JLabel(listaDisponibilita.get(i).getPartenza().getIndirizzo());
							JLabel ldArrivo = new JLabel(listaDisponibilita.get(i).getArrivo().getIndirizzo());
							//tappe intermedie
							List<Tappa> listaTappe = listaDisponibilita.get(i).getListaTappe();
							JLabel ldTappe;
							if (listaTappe == null) ldTappe = new JLabel("-");
							else{
								String sTappe = "<html>";
								for(Tappa tappa: listaTappe){
									sTappe += tappa.getIndirizzo()+"<br/>";
								}
								sTappe += "</html>";
								ldTappe = new JLabel(sTappe);
							}						
							//fine tappe intermedie
							
							JLabel ldOrarioPart = new JLabel(listaDisponibilita.get(i).getOrarioPart().toString());
							JLabel ldOrarioArr = new JLabel(listaDisponibilita.get(i).getOrarioArr().toString());						
							//data
							Date data = listaDisponibilita.get(i).getData();
							JLabel ldData;
							if(data == null) ldData = new JLabel("giornaliera");
							else ldData = new JLabel(listaDisponibilita.get(i).getData().toString());
							// fine data
							JLabel ldVeicolo = new JLabel(listaDisponibilita.get(i).getTipoVeicolo().toString());
							JLabel ldPosti = new JLabel(String.valueOf(listaDisponibilita.get(i).getNumPosti()));
							
							
							ldPartenza.setVerticalAlignment(JLabel.TOP);
							if (i%2 == 1){ ldPartenza.setOpaque(true); ldPartenza.setBackground(pannelloCorpoVisualizza.getBackground()); }
							pannelloDisponibilita.add(ldPartenza);
							
							ldArrivo.setVerticalAlignment(JLabel.TOP);
							if (i%2 == 1){ ldArrivo.setOpaque(true); ldArrivo.setBackground(pannelloCorpoVisualizza.getBackground()); }
							pannelloDisponibilita.add(ldArrivo);
							
							ldTappe.setVerticalAlignment(JLabel.TOP);
							if (i%2 == 1){ ldTappe.setOpaque(true); ldTappe.setBackground(pannelloCorpoVisualizza.getBackground()); }
							pannelloDisponibilita.add(ldTappe);
							
							ldOrarioPart.setVerticalAlignment(JLabel.TOP);
							if (i%2 == 1){ ldOrarioPart.setOpaque(true); ldOrarioPart.setBackground(pannelloCorpoVisualizza.getBackground()); }
							pannelloDisponibilita.add(ldOrarioPart);
							
							ldOrarioArr.setVerticalAlignment(JLabel.TOP);
							if (i%2 == 1){ ldOrarioArr.setOpaque(true); ldOrarioArr.setBackground(pannelloCorpoVisualizza.getBackground()); }
							pannelloDisponibilita.add(ldOrarioArr);
							
							ldData.setVerticalAlignment(JLabel.TOP);
							if (i%2 == 1){ ldData.setOpaque(true); ldData.setBackground(pannelloCorpoVisualizza.getBackground()); }
							pannelloDisponibilita.add(ldData);
							
							ldVeicolo.setVerticalAlignment(JLabel.TOP);
							if (i%2 == 1){ ldVeicolo.setOpaque(true); ldVeicolo.setBackground(pannelloCorpoVisualizza.getBackground()); }
							pannelloDisponibilita.add(ldVeicolo);
							
							ldPosti.setVerticalAlignment(JLabel.TOP);
							if (i%2 == 1){ ldPosti.setOpaque(true); ldPosti.setBackground(pannelloCorpoVisualizza.getBackground()); }
							pannelloDisponibilita.add(ldPosti);
							
							// lista Partecipanti
							
							List<Partecipazione> listaPartecipazioni = null;
							try {
								listaPartecipazioni = serviceGate.ottieniListaPartecipazioniDisponibilita(listaDisponibilita.get(i).getId());
							} catch (UserNotLoggedException e1) {
								JOptionPane.showMessageDialog(null, "Non sei loggato", "Errore", JOptionPane.ERROR_MESSAGE);
							}
							
							JLabel ldPartecipanti;
							if (listaPartecipazioni.isEmpty()) ldPartecipanti = new JLabel("-");
							else{
								String sPartecipanti = "<html>";
								for(Partecipazione p: listaPartecipazioni){
									sPartecipanti += p.getRequestor().getNome()+" "+p.getRequestor().getCognome()+"<br/>";
								}
								sPartecipanti += "</html>";
								ldPartecipanti = new JLabel(sPartecipanti);
							}
							
							ldPartecipanti.setVerticalAlignment(JLabel.TOP);
							if (i%2 == 1){ ldPartecipanti.setOpaque(true); ldPartecipanti.setBackground(pannelloCorpoVisualizza.getBackground()); }
							pannelloDisponibilita.add(ldPartecipanti);
						
							
							// bottoneElimina
							
							pannelloBottoneElimina[i] = new JPanel();
							pannelloBottoneElimina[i].setLayout(new FlowLayout());
							if (i%2 == 1) pannelloBottoneElimina[i].setBackground(pannelloCorpoVisualizza.getBackground());
							else pannelloBottoneElimina[i].setBackground(Color.WHITE);
							pannelloDisponibilita.add(pannelloBottoneElimina[i]);
							
							bottoneElimina[i] = new JButton("Elimina");
							pannelloBottoneElimina[i].add(bottoneElimina[i]);
							
							bottoneElimina[i].addMouseListener( new MouseListener(){
								
								int id = listaDisponibilita.get(i).getId();
								int cur = i;
								@Override
								public void mouseClicked(MouseEvent arg0) {}

								@Override
								public void mousePressed(MouseEvent arg0) {
									if (bottoneElimina[cur].isEnabled()){
										try {
											int esito = JOptionPane.showConfirmDialog(null, "Sei sicuro?", "Conferma Rimozione", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
											if (esito == JOptionPane.OK_OPTION){
												serviceGate.eliminaDisponibilita(id);
												bottoneElimina[cur].setBackground(Color.BLACK);
												bottoneElimina[cur].setText("Eliminata");
												bottoneElimina[cur].setForeground(Color.WHITE);
												bottoneElimina[cur].setEnabled(false);
											}																				
																			
										} catch (UserNotLoggedException e) {
											JOptionPane.showMessageDialog(null, "Non sei loggato", "Errore", JOptionPane.ERROR_MESSAGE);				
										}
									}	
								}

								@Override
								public void mouseExited(MouseEvent arg0) {}

								@Override
								public void mouseEntered(MouseEvent arg0) {}

								@Override
								public void mouseReleased(MouseEvent arg0) {}
								
							});
							
							//fine bottoneElimina
						}
					}
					else{ //if listaDisponibilita vuota
						
					}
					//END
					frameVisualizza.pack();
					//frameVisualizza.setSize(1000,400);
					frameVisualizza.setVisible(true);
					//frameVisualizza.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					frameVisualizza.setResizable(false);
				} catch (UserNotLoggedException e) {
					JOptionPane.showMessageDialog(null, "Non sei loggato", "Errore", JOptionPane.ERROR_MESSAGE);
				}
			}
			
			@Override
			public void mouseExited(MouseEvent arg0) {}
			
			@Override
			public void mouseEntered(MouseEvent arg0) {}
			
			@Override
			public void mouseClicked(MouseEvent arg0) {}
		
		});
		
		
		
		
		
		bottoneNuovaDisponibilita.addMouseListener(new MouseListener() {
			
			private JPanel pannelloCentraleNuova;
			private JPanel pannelloFormNuova;
			private JPanel pannelloBottoneNuova;
			private JLabel labelPartenzaNuova;
			private JTextField areaPartenzaNuova;
			private JLabel labelArrivoNuova;
			private JTextField areaArrivoNuova;
			private JLabel labelOraPartenzaNuova;
			private JTextField areaOraArrivoNuova;
			private JTextField areaOraPartenzaNuova;
			private JLabel labelOraArrivoNuova;
			private JLabel[] labelTappaIntermedia = new JLabel[5];
			private JTextField[] areaTappaIntermedia = new JTextField[5];
			private JLabel[] labelOraTappaIntermedia = new JLabel[5];
			private JTextField[] areaOraTappaIntermedia = new JTextField[5];
			private JLabel labelNumPostiNuova;
			private JTextField areaNumPostiNuova;
			private JLabel labelDataNuova;
			private JTextField areaDataNuova;
			private JLabel labelGiornalieraNuova;
			private JCheckBox checkGionaliera;
			private JLabel labelVeicoloNuova;
			private JComboBox areaVeicoloNuova;
			private JButton bottoneNuova;	

			@Override
			public void mouseReleased(MouseEvent arg0) {}
			
			@Override
			public void mousePressed(MouseEvent arg0) {
				
				// ******************* FINESTRA NUOVA DISPONIBILITA **********************//
				
				
				// Inizializzazione Frame
				frameNuova = new JFrame("LESS-CAOS");
				frameNuova.setLayout(new BorderLayout());
				
				
				// Inizializzazione e Inserimento pannelli principali
				pannelloTitoloNuova = new JPanel();
				pannelloTitoloNuova.setLayout(new FlowLayout());
				pannelloTitoloNuova.setBackground(Color.DARK_GRAY);
				frameNuova.add(pannelloTitoloNuova, BorderLayout.NORTH);
				
				pannelloCorpoNuova = new JPanel();
				pannelloCorpoNuova.setLayout(new FlowLayout());
				//pannelloCorpo.setBackground(Color.LIGHT_GRAY);
				frameNuova.add(pannelloCorpoNuova, BorderLayout.CENTER);
				
						
				pannelloCentraleNuova = new JPanel();
				pannelloCentraleNuova.setLayout(new BoxLayout(pannelloCentraleNuova, BoxLayout.Y_AXIS));
				pannelloCorpoNuova.add(pannelloCentraleNuova);
				
				
				
				// Inizializzazione e Inserimento label
				titoloNuova = new JLabel("Nuova Disponibilita");
				titoloNuova.setForeground(Color.WHITE);
				pannelloTitoloNuova.add(titoloNuova);
				
				// Inizializzazione e Inserimento pannello form
				pannelloFormNuova = new JPanel();
				pannelloFormNuova.setLayout(new GridLayout(17,4));
				//pannelloForm.setBackground(Color.LIGHT_GRAY);
				pannelloCentraleNuova.add(pannelloFormNuova);
				
				pannelloBottoneNuova = new JPanel();
				pannelloBottoneNuova.setLayout(new FlowLayout());
				pannelloCentraleNuova.add(pannelloBottoneNuova);
				
				
				//Inizializzazioni e Inserimento label e textField
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				
				labelPartenzaNuova = new JLabel("Tappa Partenza: ");
				pannelloFormNuova.add(labelPartenzaNuova);
				
				areaPartenzaNuova = new JTextField(10);
				pannelloFormNuova.add(areaPartenzaNuova);
				
				labelOraPartenzaNuova = new JLabel("     Ora Partenza: ");
				pannelloFormNuova.add(labelOraPartenzaNuova);
				
				areaOraPartenzaNuova = new JTextField(10);
				pannelloFormNuova.add(areaOraPartenzaNuova);
				
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));				
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				
				
				labelArrivoNuova = new JLabel("Tappa Arrivo: ");
				pannelloFormNuova.add(labelArrivoNuova);
				
				areaArrivoNuova = new JTextField(10);
				pannelloFormNuova.add(areaArrivoNuova);
				
				
				labelOraArrivoNuova = new JLabel("     Ora Arrivo: ");
				pannelloFormNuova.add(labelOraArrivoNuova);
				
				areaOraArrivoNuova = new JTextField(10);
				pannelloFormNuova.add(areaOraArrivoNuova);
				
				
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
			
				
				labelTappaIntermedia[0] = new JLabel("Tappe Intermedie: ");
				pannelloFormNuova.add(labelTappaIntermedia[0]);
				
				areaTappaIntermedia[0] = new JTextField(10);
				pannelloFormNuova.add(areaTappaIntermedia[0]);
									
				labelOraTappaIntermedia[0] = new JLabel("     Ore Arrivo: ");
				pannelloFormNuova.add(labelOraTappaIntermedia[0]);
				
				areaOraTappaIntermedia[0] = new JTextField(10);
				pannelloFormNuova.add(areaOraTappaIntermedia[0]);
				
				
				for(int j=1; j<5; j++) {
										
					pannelloFormNuova.add(new JLabel(""));
					
					areaTappaIntermedia[j] = new JTextField(10);
					pannelloFormNuova.add(areaTappaIntermedia[j]);
										
					pannelloFormNuova.add(new JLabel(""));
					
					areaOraTappaIntermedia[j] = new JTextField(10);
					pannelloFormNuova.add(areaOraTappaIntermedia[j]);
										

				}
				
				
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				
				
				labelVeicoloNuova = new JLabel("Tipo Veicolo: ");
				pannelloFormNuova.add(labelVeicoloNuova);
				
				TipoVeicolo[] tipi = TipoVeicolo.values();
				Vector<TipoVeicolo> veicoloStrings = new Vector<TipoVeicolo>(tipi.length);
				for (int i = 0; i < tipi.length; i++) {
					veicoloStrings.add(tipi[i]);
				}
				areaVeicoloNuova = new JComboBox(veicoloStrings);
				areaVeicoloNuova.setSelectedIndex(0);
				pannelloFormNuova.add(areaVeicoloNuova);
				
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				
				labelNumPostiNuova = new JLabel("Numero Posti: ");
				pannelloFormNuova.add(labelNumPostiNuova);
				
				areaNumPostiNuova = new JTextField(10);
				pannelloFormNuova.add(areaNumPostiNuova);
								
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				
				
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				
				
				labelDataNuova = new JLabel("Data: ");
				pannelloFormNuova.add(labelDataNuova);
				
				areaDataNuova = new JTextField(10);
				pannelloFormNuova.add(areaDataNuova);
								
				labelGiornalieraNuova = new JLabel("     Giornaliera: ");
				pannelloFormNuova.add(labelGiornalieraNuova);
				
				checkGionaliera = new JCheckBox();
				pannelloFormNuova.add(checkGionaliera);
				
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				pannelloFormNuova.add(new JLabel(""));
				
				// Inizializzazione e Inserimento button registra
				bottoneNuova = new JButton("Inserisci");		
				bottoneNuova.setEnabled(true);
				
				pannelloBottoneNuova.add(bottoneNuova);
				
				//END
				frameNuova.pack();
				//frameNuova.setSize(500,400);
				frameNuova.setVisible(true);
				//frameNuova.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				
				
				//*** Eventi ***//
				
				checkGionaliera.addActionListener( new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent arg0) {
						
						if (checkGionaliera.isSelected()){
							areaDataNuova.setEnabled(false);	
						}
						else{
							areaDataNuova.setEnabled(true);
						}
					}
				});	
				
				
				bottoneNuova.addMouseListener(	new MouseListener() {
					
					@Override
					public void mouseReleased(MouseEvent arg0) {						
					}
					
					@Override
					public void mousePressed(MouseEvent arg0) {
						
						boolean positivo = true;
						
						// controllo che tutti i campi importanti siano stati completati
						if (	( (areaPartenzaNuova.getText() != null) && (!areaPartenzaNuova.getText().trim().equals("")) ) &&
								( (areaArrivoNuova.getText() != null) && (!areaArrivoNuova.getText().trim().equals("")) ) &&
								( (areaOraPartenzaNuova.getText() != null) && (!areaOraPartenzaNuova.getText().trim().equals("")) ) &&
								( (areaOraArrivoNuova.getText() != null) && (!areaOraArrivoNuova.getText().trim().equals("")) ) &&
								( (areaNumPostiNuova.getText() != null) && (!areaNumPostiNuova.getText().trim().equals("")) ) &&
								
								( ((areaDataNuova.getText() != null) && (!areaDataNuova.getText().trim().equals(""))) || checkGionaliera.isSelected() )
							
								&&
								// i campi TappaIntermedia[0] e OrarioArrivoTappa[0] o sono entrambi completati e entrambi vuoti
								( ( ( (areaTappaIntermedia[0].getText() != null) && (!areaTappaIntermedia[0].getText().trim().equals("")) ) 
										&&
								    ( (areaOraTappaIntermedia[0].getText() != null) && (!areaOraTappaIntermedia[0].getText().trim().equals("")) )
								  ) 
								   ||
								  ( ( (areaTappaIntermedia[0].getText() == null) || (areaTappaIntermedia[0].getText().trim().equals("")) ) 
											&&
									( (areaOraTappaIntermedia[0].getText() == null) || (areaOraTappaIntermedia[0].getText().trim().equals("")) )
								  )
								)
								
								&&
								// i campi TappaIntermedia[1] e OrarioArrivoTappa[1] o sono entrambi completati e entrambi vuoti
								( ( ( (areaTappaIntermedia[1].getText() != null) && (!areaTappaIntermedia[1].getText().trim().equals("")) ) 
										&&
								    ( (areaOraTappaIntermedia[1].getText() != null) && (!areaOraTappaIntermedia[1].getText().trim().equals("")) )
								  ) 
								   ||
								  ( ( (areaTappaIntermedia[1].getText() == null) || (areaTappaIntermedia[1].getText().trim().equals("")) ) 
											&&
									( (areaOraTappaIntermedia[1].getText() == null) || (areaOraTappaIntermedia[1].getText().trim().equals("")) )
								  )
								)
								
								&&
								// i campi TappaIntermedia[2] e OrarioArrivoTappa[2] o sono entrambi completati e entrambi vuoti
								( ( ( (areaTappaIntermedia[2].getText() != null) && (!areaTappaIntermedia[2].getText().trim().equals("")) ) 
										&&
								    ( (areaOraTappaIntermedia[2].getText() != null) && (!areaOraTappaIntermedia[2].getText().trim().equals("")) )
								  ) 
								   ||
								  ( ( (areaTappaIntermedia[2].getText() == null) || (areaTappaIntermedia[2].getText().trim().equals("")) ) 
											&&
									( (areaOraTappaIntermedia[2].getText() == null) || (areaOraTappaIntermedia[2].getText().trim().equals("")) )
								  )
								)
								
								&&
								// i campi TappaIntermedia[3] e OrarioArrivoTappa[3] o sono entrambi completati e entrambi vuoti
								( ( ( (areaTappaIntermedia[3].getText() != null) && (!areaTappaIntermedia[3].getText().trim().equals("")) ) 
										&&
								    ( (areaOraTappaIntermedia[3].getText() != null) && (!areaOraTappaIntermedia[3].getText().trim().equals("")) )
								  ) 
								   ||
								  ( ( (areaTappaIntermedia[3].getText() == null) || (areaTappaIntermedia[3].getText().trim().equals("")) ) 
											&&
									( (areaOraTappaIntermedia[3].getText() == null) || (areaOraTappaIntermedia[3].getText().trim().equals("")) )
								  )
								)
								
								&&
								// i campi TappaIntermedia[4] e OrarioArrivoTappa[4] o sono entrambi completati e entrambi vuoti
								( ( ( (areaTappaIntermedia[4].getText() != null) && (!areaTappaIntermedia[4].getText().trim().equals("")) ) 
										&&
								    ( (areaOraTappaIntermedia[4].getText() != null) && (!areaOraTappaIntermedia[4].getText().trim().equals("")) )
								  ) 
								   ||
								  ( ( (areaTappaIntermedia[4].getText() == null) || (areaTappaIntermedia[4].getText().trim().equals("")) ) 
											&&
									( (areaOraTappaIntermedia[4].getText() == null) || (areaOraTappaIntermedia[4].getText().trim().equals("")) )
								  )
								)
								 
							){
						
							
							
							//controllo la correttezza dei campi orario
							if ( !areaOraPartenzaNuova.getText().matches("[0-2][0-9]:[0-5][0-9]") ){																	
								positivo = false;
								JOptionPane.showMessageDialog(null, "Il campo Orario Partenza deve avere il formato HH:MM", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);						
							}
							
							if ( !areaOraArrivoNuova.getText().matches("[0-2][0-9]:[0-5][0-9]") ){																	
								positivo = false;
								JOptionPane.showMessageDialog(null, "Il campo Orario Arrivo deve avere il formato HH:MM", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);						
							}
							
							for (int k=0; k<5;k++){
								if ( ((areaOraTappaIntermedia[k].getText() != null) && (!areaOraTappaIntermedia[k].getText().trim().equals(""))) && (!areaOraTappaIntermedia[k].getText().matches("[0-2][0-9]:[0-5][0-9]")) ){																	
									positivo = false;
									JOptionPane.showMessageDialog(null, "I campi Orario Arrivo devono avere il formato HH:MM", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);						
								}
							}
																			
														
							//controllo la correttezza del campo posti
							if ( !areaNumPostiNuova.getText().matches("[1-9]") ){
								positivo = false;
								JOptionPane.showMessageDialog(null, "Il campo Numero Posti deve essere un numero", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);
							}
							
							//controllo la correttezza del campo data
							if (areaDataNuova.isEnabled()){
								if ( !areaDataNuova.getText().matches("[0-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]") ){																	
									positivo = false;
									JOptionPane.showMessageDialog(null, "Il campo Data deve avere il formato AAAA-MM-GG", "Inserimento Errato", JOptionPane.INFORMATION_MESSAGE);						
								}
							}					
						}
						else{
							positivo = false;
							JOptionPane.showMessageDialog(null, "Ci sono campi non completati", "Inserimento Errato", JOptionPane.ERROR_MESSAGE);
						
						
						}
						
						
						// Esecuzione Inserimento
						
						if (positivo){
							
							boolean esito;
							int numPosti = Integer.parseInt(areaNumPostiNuova.getText());
							Date data = null;
							boolean occasionale = true;
							if (areaDataNuova.isEnabled()) {
								String[] partiData = areaDataNuova.getText().split("-");
								int year = Integer.parseInt(partiData[0]);
								int month = Integer.parseInt(partiData[1]) - 1;
								int day = Integer.parseInt(partiData[2]);
								//System.out.println(day + " " + month + " " + year);
								data = GCInitializer.dateInitializer(day, month, year);
							}
							if (!areaDataNuova.isEnabled()){
								occasionale = false;
							}
						
							Tappa partenza = new Tappa();
							partenza.setIndirizzo(areaPartenzaNuova.getText());
							String[] partiOrario = areaOraPartenzaNuova.getText().split(":");
							int hour = Integer.parseInt(partiOrario[0]);
							int minute = Integer.parseInt(partiOrario[1]);
							//System.out.println(hour + " " + minute);
							partenza.setOrario(GCInitializer.timeInitializer(hour, minute));
																	
							
							Tappa arrivo = new Tappa();
							arrivo.setIndirizzo(areaArrivoNuova.getText());
							partiOrario = areaOraArrivoNuova.getText().split(":");
							hour = Integer.parseInt(partiOrario[0]);
							minute = Integer.parseInt(partiOrario[1]);
							arrivo.setOrario(GCInitializer.timeInitializer(hour, minute));
							
							List listaTappe = null;
							for (int k=0; k<5;k++){
								if ( (areaOraTappaIntermedia[k].getText() != null) && (!areaOraTappaIntermedia[k].getText().trim().equals(""))){
									if (listaTappe == null) listaTappe = new ArrayList();
									Tappa t = new Tappa();
									t.setIndirizzo(areaTappaIntermedia[k].getText());
									partiOrario = areaOraTappaIntermedia[k].getText().split(":");
									hour = Integer.parseInt(partiOrario[0]);
									minute = Integer.parseInt(partiOrario[1]);
									t.setOrario(GCInitializer.timeInitializer(hour, minute));
									listaTappe.add(t);
								}
							}
							
							try {
								
								esito = serviceGate.inserisciDisponibilita(numPosti, (TipoVeicolo)areaVeicoloNuova.getSelectedItem(), data, partenza, arrivo, listaTappe, occasionale);
														
								if (esito){
									JOptionPane.showMessageDialog(null, "Inserimento effettuato con successo", "Registrazione Effettuata", JOptionPane.INFORMATION_MESSAGE);
									frameNuova.dispose();
								}
								else{
									JOptionPane.showMessageDialog(null, "Inserimento non riuscito", "Registrazione Non riuscita", JOptionPane.ERROR_MESSAGE);	
								}
							} catch (UserNotLoggedException e) {
								JOptionPane.showMessageDialog(null, "Non sei loggato", "Errore", JOptionPane.ERROR_MESSAGE);
							}
						}
						
						
					}
					
					@Override
					public void mouseExited(MouseEvent arg0) {						
					}
					
					@Override
					public void mouseEntered(MouseEvent arg0) {						
					}
					
					@Override
					public void mouseClicked(MouseEvent arg0) {						
					}
				});
				
			}
			
			@Override
			public void mouseExited(MouseEvent arg0) {}
			
			@Override
			public void mouseEntered(MouseEvent arg0) {}
			
			@Override
			public void mouseClicked(MouseEvent arg0) {}
		
		});
		
		
	}
	
	
	
	
	
}
